import logging  # 日志模块
import os  # 文件和目录路径
import time  # 时间管理

from common.tools import get_project_path, build_path  # 导入自定义工具


def create_log_directory():
    """
    获取或创建日志存储目录。

    Returns:
        str: 日志文件存储目录路径
    """
    # 设置日志存储路径
    log_path = get_project_path() + build_path("logs", "all_logs", add_sep_before=True)
    # 自动创建日志目录
    os.makedirs(log_path, exist_ok=True)
    return log_path


def get_log(logger_name, level=logging.INFO):
    """
    创建并配置日志记录器，将日志写入指定文件。

    Args:
        logger_name (str): 日志记录器名称。
        level (int): 日志级别，默认是 INFO。

    Returns:
        logging.Logger: 配置好的日志记录器实例。
    """
    # 如果已经存在同名日志记录器，则直接返回
    logger = logging.getLogger(logger_name)
    if logger.hasHandlers():
        return logger

    # 设置日志级别
    logger.setLevel(level)

    # 获取当前时间作为日志文件名的一部分
    now_time = time.strftime("%Y%m%d%H%M", time.localtime())
    # 获取日志文件存储路径
    all_log_path = create_log_directory()
    all_log_name = os.path.join(all_log_path, f"{now_time}.log")

    # 创建文件处理器并设置日志级别
    file_handler = logging.FileHandler(all_log_name, encoding="utf-8")
    file_handler.setLevel(level)

    # 定义日志格式
    formatter = logging.Formatter(
        "%(asctime)s - %(filename)s - %(module)s - %(funcName)s - %(lineno)d - %(levelname)s - %(message)s",
        datefmt="%Y-%m-%d %H:%M:%S")
    file_handler.setFormatter(formatter)

    # 将文件处理器添加到日志记录器
    logger.addHandler(file_handler)

    return logger


# 实例化日志记录器
log = get_log("自动化测试")

if __name__ == '__main__':
    # 输出不同级别的日志信息
    log.debug("这是一个调试信息")  # 不会显示在日志中，因为默认级别为 INFO
    log.info("这是一个信息级别的日志")
    log.warning("这是一个警告级别的日志")
    log.error("这是一个错误级别的日志")
    log.critical("这是一个严重错误级别的日志")
